package br.gov.ibama.client.componentes;

import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.ImgButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.form.fields.DateItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.HiddenItem;
import com.smartgwt.client.widgets.form.fields.MultiFileItem;
import com.smartgwt.client.widgets.form.fields.SectionItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.toolbar.ToolStrip;

public class BasisComponentes {
	
	private static final int TAMANHO_ICONE_32 = 32;
	private static final int TOP_10 = 10;
	private static final int COLSPAN_3 = 3;
	private static final String DIGITE_PARA_FILTRAR_HINT = "Digite para filtrar...";
	private static final int MIN_HEIGHT_50 = 50;
	private static final int LARGURA_40 = 40;
	private static final int PADDING_10 = 10;
	private static final int PADDING_5 = 5;
	private static final String ALINHAMENTO_CENTRALIZADO = "center";
	private static final int ALTURA_32 = 32;
	private static final int LARGURA_32 = 32;
	private static final int QTD_COLUNAS_3 = 3;
	private static final int LARGURA_700 = 700;
	private static final int MARGEM_BOTOES = 10;
	private static final int LARGURA_BARRA_BOTOES = 50;
	private static final String ALINHAMENTO_ERRO = "right";
	private static final int TM_INPUT_PEQUENO = 220;
	private static final int TM_INPUT_GRANDE = 360;
	private static final String COR_BRANCA = "white";
	
	/**
	 * 
	 */
	private BasisComponentes() {
		// TODO Auto-generated constructor stub
	}

	public static TextItem criaTextItemRequerido(String nome, String titulo) {
		return new TextItemObrigatorio(nome, titulo);
	}

	public static ComboboxObrigatorio criaComboboxObrigatorio(String nome,
			String titulo) {
		return new ComboboxObrigatorio(nome, titulo);
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorio(String nome,
			String titulo) {
		return new TextAreaObrigatorio(nome, titulo);
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorioVertical(
			String nome, String titulo) {
		TextAreaObrigatorio text = new TextAreaObrigatorio(nome, titulo);
		text.setTitleOrientation(TitleOrientation.TOP);
		text.setWrapTitle(true);
		return text;
	}

	public static TextItem criaTextItemRequeridoPequeno(String nome,
			String titulo) {
		TextItem campo = new TextItemObrigatorio(nome, titulo);
		campo.setWidth(TM_INPUT_PEQUENO);
		return campo;
	}

	public static ComboBoxItem criaComboboxPequeno(
			String nome, String titulo) {
		ComboBoxItem combo = new ComboBoxItem(nome, titulo);
		combo.setWidth(TM_INPUT_PEQUENO);
		return combo;
	}
	
	public static ComboBoxItem criaComboboxGrande(
			String nome, String titulo) {
		ComboBoxItem combo = new ComboBoxItem(nome, titulo);
		combo.setWidth(TM_INPUT_GRANDE);
		return combo;
	}
	
	public static ComboboxObrigatorio criaComboboxObrigatorioPequeno(
			String nome, String titulo) {
		ComboboxObrigatorio combo = new ComboboxObrigatorio(nome, titulo);
		combo.setWidth(TM_INPUT_PEQUENO);
		return combo;
	}

	public static TextAreaItem criaTextAreaPequeno(String nome, String titulo) {
		TextAreaItem text = new TextAreaItem(nome, titulo);
		text.setWidth(TM_INPUT_PEQUENO);
		return text;
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorioPequeno(
			String nome, String titulo) {
		TextAreaObrigatorio text = new TextAreaObrigatorio(nome, titulo);
		text.setWidth(TM_INPUT_PEQUENO);
		return text;
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorioPequenoVertical(
			String nome, String titulo) {
		TextAreaObrigatorio text = new TextAreaObrigatorio(nome, titulo);
		text.setWidth(TM_INPUT_PEQUENO);
		text.setTitleOrientation(TitleOrientation.TOP);
		text.setWrapTitle(true);
		return text;
	}

	public static TextItem criaTextItemRequeridoGrande(String nome,
			String titulo) {
		TextItem campo = new TextItemObrigatorio(nome, titulo);
		campo.setWidth(TM_INPUT_GRANDE);
		return campo;
	}

	public static ComboboxObrigatorio criaComboboxObrigatorioGrande(
			String nome, String titulo) {
		ComboboxObrigatorio combo = new ComboboxObrigatorio(nome, titulo);
		combo.setWidth(TM_INPUT_GRANDE);
		return combo;
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorioGrande(
			String nome, String titulo) {
		TextAreaObrigatorio text = new TextAreaObrigatorio(nome, titulo);
		text.setWidth(TM_INPUT_GRANDE);
		return text;
	}

	public static TextAreaObrigatorio criaTextAreaObrigatorioGrandeVertical(
			String nome, String titulo) {
		TextAreaObrigatorio text = new TextAreaObrigatorio(nome, titulo);
		text.setWidth(LARGURA_700);
		text.setTitleOrientation(TitleOrientation.TOP);
		text.setWrapTitle(true);
		text.setColSpan(QTD_COLUNAS_3);
		return text;
	}

	public static TextAreaItem criaTextAreaGrandeVertical(String nome,
			String titulo) {
		TextAreaItem text = new TextAreaItem(nome, titulo);
		text.setWidth(LARGURA_700);
		text.setTitleOrientation(TitleOrientation.TOP);
		text.setWrapTitle(true);
		text.setColSpan(COLSPAN_3);
		return text;
	}

	public static TextItem criaTextItem(String nome) {
		return new TextItem(nome);
	}

	public static TextItem criaTextItemGrande(String nome) {
		TextItem textItem = new TextItem(nome);
		textItem.setWidth(TM_INPUT_GRANDE);
		return textItem;
	}

	public static TextItem criaTextItemPequeno(String nome) {
		TextItem textItem = new TextItem(nome);
		textItem.setWidth(TM_INPUT_PEQUENO);
		return textItem;
	}

	public static TextItem criaTextItemTelefoneFixo(String nome) {
		TextItem textItemPequeno = criaTextItemPequeno(nome);
		textItemPequeno.setMask("(##) 99999999");
		return textItemPequeno;
	}

	public static TextItem criaTextItemTelefoneCelular(String nome) {
		TextItem textItemPequeno = criaTextItemPequeno(nome);
		textItemPequeno.setMask("(##) 999999999");
		return textItemPequeno;
	}

	public static ToolStrip criaBarraDeBotoesVertical(String height) {
		ToolStrip toolStrip = new ToolStrip();
		toolStrip.setVertical(true);
		toolStrip.setWidth(LARGURA_40);
		toolStrip.setMinHeight(MIN_HEIGHT_50);
		if (height.length() > 0) {
			toolStrip.setHeight(height);
		}
		toolStrip.setAlign(VerticalAlignment.CENTER);
		toolStrip.setWidth(LARGURA_BARRA_BOTOES);
		toolStrip.setMembersMargin(MARGEM_BOTOES);
		toolStrip.setPadding(PADDING_5);
		return toolStrip;
	}

	public static VLayout criaFrameConteudo() {
		VLayout conteudo = new VLayout();
		conteudo.setWidth100();
		conteudo.setHeight100();
		conteudo.setPadding(PADDING_10);
		conteudo.setAlign(VerticalAlignment.TOP);
		return conteudo;
	}

	public static ImgButton criaImgButton(String hint, String imagem) {
		ImgButton botao = new ImgButton();
		botao.setTop(TOP_10);
		botao.setWidth(LARGURA_32);
		botao.setHeight(ALTURA_32);
		botao.setIconOrientation(ALINHAMENTO_ERRO);
		botao.setTooltip(hint);
		botao.setSrc(imagem);
		return botao;
	}

	public static RadioGroupItemBasis criaRadioGroupBasis(String name,
			String title) {
		return new RadioGroupItemBasis(name, title);
	}

	public static RadioGroupItemBasis criaRadioGroupBasisObrigatorio(
			String name, String title) {
		RadioGroupItemBasis r = criaRadioGroupBasis(name, title);
		r.setObrigatorio();
		return r;
	}

	public static ListGrid criaListGridIndice() {
		ListGrid listGrid = new ListGrid();
		listGrid.setWidth100();
		listGrid.setHeight100();
		listGrid.setShowFilterEditor(true);
		listGrid.setAutoFetchData(true);
		listGrid.setAlternateRecordStyles(true);
		return listGrid;
	}

	public static ComboGenericaDS criaComboboxDataSource(String name,
			String title, String datasource, String campoChave, String campoShow) {
		ComboGenericaDS combo = new ComboGenericaDS(name, title, datasource,
				campoChave, campoShow);
		return combo;
	}

	public static SectionStackSection criaSecaoDeMenu(String titulo) {
		return new SectionStackSection(titulo);
	}

	public static ListGridField criaListGridField(String nome) {
		ListGridField coluna = new ListGridField();
		coluna.setName(nome);
		coluna.setFilterEditorProperties(criaFilterEditorProperties());
		return coluna;
	}

	private static FormItem criaFilterEditorProperties() {
		TextItem formItem = new TextItem();
		formItem.setHint(DIGITE_PARA_FILTRAR_HINT);
		formItem.setShowHintInField(true);
		return formItem;
	}

	public static LayoutSpacer criaSpacer() {
		return new LayoutSpacer();
	}

	public static ImgButton criaBotaoControle(String imagem, String tooltip) {
		ImgButton btnControle = new ImgButton();
		btnControle.setSrc(imagem);
		btnControle.setHeight(ALTURA_32);
		btnControle.setWidth(LARGURA_32);
		btnControle.setIconSize(TAMANHO_ICONE_32);
		btnControle.setIconAlign(ALINHAMENTO_CENTRALIZADO);
		btnControle.setTooltip(tooltip);
		return btnControle;
	}

	public static Label criaLabel(String titulo) {
		Label label = new Label();
		label.setContents(titulo);
		return label;
	}

	public static StaticTextItem criaStaticTextItem(
			ConfigStaticTextItem configuracao) {
		configuracao.valida();
		StaticTextItem staticTextItem = new StaticTextItem();
		staticTextItem.setName(configuracao.getNome());
		staticTextItem.setTitle(configuracao.getTitulo());
		if (configuracao.getNumeroDeColunas() > 0) {
			staticTextItem.setColSpan(configuracao.getNumeroDeColunas());
		}
		staticTextItem.setTooltip(configuracao.getDica());
		return staticTextItem;
	}

	public static ListGrid criaListGridIndice(DataSource dataSource) {
		ListGrid listGrid = new ListGrid();
		listGrid.setWidth100();
		listGrid.setHeight100();
		listGrid.setShowFilterEditor(true);
		listGrid.setAutoFetchData(true);
		listGrid.setAlternateRecordStyles(true);
		return listGrid;
	}

	public static ToolStrip criaBarraDeBotoesVertical() {
		ToolStrip toolStrip = new ToolStrip();
		toolStrip.setVertical(true);
		toolStrip.setHeight100();
		toolStrip.setAlign(VerticalAlignment.CENTER);
		toolStrip.setBackgroundColor(COR_BRANCA);
		toolStrip.setWidth(LARGURA_BARRA_BOTOES);
		toolStrip.setMembersMargin(MARGEM_BOTOES);
		return toolStrip;
	}
	
	public static DateItem criaDateItem(String name, String title){
		DateItem dateItem = new DateItem();
		dateItem.setName(name);
		dateItem.setTitle(title);
		return dateItem;
	}
	
	public static DateItem criaDateItemObrigatorio(String name, String title) {
		DateItem dateItem = new DateItem();
		dateItem.setName(name);
		dateItem.setTitle(title);
		dateItem.setRequired(true);
		return dateItem;
	}
	
	public static DateItem criaDateItem(String name, String title, boolean required, boolean useTextField, boolean disabled, String hint, int pixels, int cols){
		DateItem dateItem = new DateItem();
		dateItem.setName(name);
		dateItem.setTitle(title);
		dateItem.setRequired(required);
		dateItem.setUseTextField(useTextField);
		dateItem.setDisabled(disabled);
		dateItem.setPrompt(hint);
		dateItem.setWidth(pixels);
		dateItem.setColSpan(cols);
		return dateItem;
	}
	
	public static MultiFileItem criaMultiFileItem(String datasource, String nome, String titulo, final SectionItem secao) {
		  MultiFileItem multiFilePicker = new MultiFileItem(nome);
		  multiFilePicker.setAttribute("dataSource", datasource);
		  multiFilePicker.setTitle(titulo);
		  multiFilePicker.setTitleOrientation(TitleOrientation.TOP);
		  multiFilePicker.setWidth("100%");
		  multiFilePicker.setColSpan(3);
		  multiFilePicker.setEditButtonPrompt("Adicionar arquivos");
		  multiFilePicker.setRemoveButtonPrompt("Excluir arquivos");
		  multiFilePicker.setPickerAddAnotherFileButtonTitle("Adicionar outro");
		  multiFilePicker.setPickerCancelButtonTitle("Cancelar");
		  multiFilePicker.setPickerUploadButtonTitle("Salvar");
		  return multiFilePicker;
	}
	
	public static HiddenItem criaHiddenItem(String name, Object value) {
		HiddenItem item = new HiddenItem();
		item.setName(name);
		item.setValue(value);
		return item;
	}
}